home *** CD-ROM | disk | FTP | other *** search
- overlay "tex6"
- #define EXTERN extern
- #include "texd.h"
-
- alignpeek () { /* 20 */ r_alignpeek
- lab20: alignstate = 1000000 ;
- do { getxtoken () ;
- } while ( ! ( curcmd != 10 ) ) ;
- if ( curcmd == 34 )
- {
- scanleftbrac () ;
- newsavelevel ( 7 ) ;
- if ( curlist .modefield == - 1 )
- normalparagr () ;
- }
- else if ( curcmd == 2 )
- finalign () ;
- else if ( ( curcmd == 5 ) && ( curchr == 130 ) )
- goto lab20 ;
- else {
- initrow () ;
- initcol () ;
- }
- }
- halfword zfiniteshrink ( p )
- halfword p ;
- {register halfword Result; r_finiteshrink
- halfword q ;
- if ( noshrinkerro )
- {
- noshrinkerro = false ;
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 771 ) ;
- }
- {
- helpptr = 5 ;
- helpline [ 4 ] = 772 ;
- helpline [ 3 ] = 773 ;
- helpline [ 2 ] = 774 ;
- helpline [ 1 ] = 775 ;
- helpline [ 0 ] = 776 ;
- }
- error () ;
- }
- q = newspec ( p ) ;
- mem [(long) q ] .hh.b1 = 0 ;
- deletegluere ( p ) ;
- Result = q ;
- return(Result) ;
- }
- ztrybreak ( pi , breaktype )
- integer pi ;
- smallnumber breaktype ;
- {/* 10 30 31 22 60 */ r_trybreak
- halfword r ;
- halfword prevr ;
- halfword oldl ;
- boolean nobreakyet ;
- halfword prevprevr ;
- halfword s ;
- halfword q ;
- halfword v ;
- integer t ;
- internalfont f ;
- halfword l ;
- boolean noderstaysac ;
- scaled linewidth ;
- quarterword fitclass ;
- halfword b ;
- integer d ;
- boolean artificialba ;
- halfword savelink ;
- scaled shortfall ;
- fourquarters qi;
- if ( abs ( pi ) >= 10000 )
- if ( pi > 0 )
- goto lab10 ;
- else pi = - 10000 ;
- nobreakyet = true ;
- prevr = memtop - 7 ;
- oldl = 0 ;
- curactivewid [ 1 ] = activewidth [ 1 ] ;
- curactivewid [ 2 ] = activewidth [ 2 ] ;
- curactivewid [ 3 ] = activewidth [ 3 ] ;
- curactivewid [ 4 ] = activewidth [ 4 ] ;
- curactivewid [ 5 ] = activewidth [ 5 ] ;
- curactivewid [ 6 ] = activewidth [ 6 ] ;
- while ( true ) {
- lab22: r = mem [(long) prevr ] .hh .v.RH ;
- if ( mem [(long) r ] .hh.b0 == 2 )
- {
- curactivewid [ 1 ] = curactivewid [ 1 ] + mem [(long) r + 1 ] .cint ;
- curactivewid [ 2 ] = curactivewid [ 2 ] + mem [(long) r + 2 ] .cint ;
- curactivewid [ 3 ] = curactivewid [ 3 ] + mem [(long) r + 3 ] .cint ;
- curactivewid [ 4 ] = curactivewid [ 4 ] + mem [(long) r + 4 ] .cint ;
- curactivewid [ 5 ] = curactivewid [ 5 ] + mem [(long) r + 5 ] .cint ;
- curactivewid [ 6 ] = curactivewid [ 6 ] + mem [(long) r + 6 ] .cint ;
- prevprevr = prevr ;
- prevr = r ;
- goto lab22 ;
- }
- {
- l = mem [(long) r + 1 ] .hh .v.LH ;
- if ( l > oldl )
- {
- if ( ( minimumdemer < 1073741823 ) && ( ( oldl != easyline ) || ( r ==
- memtop - 7 ) ) )
- {
- if ( nobreakyet )
- {
- nobreakyet = false ;
- breakwidth [ 1 ] = background [ 1 ] ;
- breakwidth [ 2 ] = background [ 2 ] ;
- breakwidth [ 3 ] = background [ 3 ] ;
- breakwidth [ 4 ] = background [ 4 ] ;
- breakwidth [ 5 ] = background [ 5 ] ;
- breakwidth [ 6 ] = background [ 6 ] ;
- s = curp ;
- if ( breaktype > 0 )
- if ( curp != 0 )
- {
- t = mem [(long) curp ] .hh.b1 ;
- v = curp ;
- s = mem [(long) curp + 1 ] .hh .v.RH ;
- while ( t > 0 ) {
- decr ( t ) ;
- v = mem [(long) v ] .hh .v.RH ;
- if ( ( v >= himemmin ) )
- {
- f = mem [(long) v ] .hh.b0 ;
- /* breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [
- f ] + fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq
- .b0 ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) v ] .hh.b1 ] .qqqq;
- breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase [ f ]
- + qi .b0 ] .cint ;
- }
- else switch ( mem [(long) v ] .hh.b0 )
- {case 6 :
- {
- f = mem [(long) v + 1 ] .hh.b0 ;
- /* breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase
- [ f ] + fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ]
- .qqqq .b0 ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) v + 1 ] .hh.b1 ].qqqq;
- breakwidth [ 1 ] = breakwidth [ 1 ] - fontinfo [ widthbase
- [ f ] +qi.b0 ] .cint ;
- }
- break ;
- case 0 :
- case 1 :
- case 2 :
- case 11 :
- breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ;
- break ;
- default :
- confusion ( 777 ) ;
- break ;
- }
- }
- while ( s != 0 ) {
- if ( ( s >= himemmin ) )
- {
- f = mem [(long) s ] .hh.b0 ;
- /* breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [
- f ] + fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq
- .b0 ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq;
- breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase [ f ]
- + qi .b0 ] .cint ;
- }
- else switch ( mem [(long) s ] .hh.b0 )
- {case 6 :
- {
- f = mem [(long) s + 1 ] .hh.b0 ;
- /* breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase
- [ f ] + fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ]
- .qqqq .b0 ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ].qqqq;
- breakwidth [ 1 ] = breakwidth [ 1 ] + fontinfo [ widthbase
- [ f ] +qi.b0 ] .cint ;
- }
- break ;
- case 0 :
- case 1 :
- case 2 :
- breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ] .cint ;
- break ;
- case 11 :
- if ( ( t == 0 ) && ( mem [(long) s ] .hh.b1 != 2 ) )
- t = - 1 ;
- else breakwidth [ 1 ] = breakwidth [ 1 ] + mem [(long) s + 1 ]
- .cint ;
- break ;
- default :
- confusion ( 778 ) ;
- break ;
- }
- incr ( t ) ;
- s = mem [(long) s ] .hh .v.RH ;
- }
- breakwidth [ 1 ] = breakwidth [ 1 ] + discwidth ;
- if ( t == 0 )
- s = mem [(long) v ] .hh .v.RH ;
- }
- while ( s != 0 ) {
- if ( ( s >= himemmin ) )
- goto lab30 ;
- switch ( mem [(long) s ] .hh.b0 )
- {case 10 :
- {
- v = mem [(long) s + 1 ] .hh .v.LH ;
- breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) v + 1 ] .cint ;
- breakwidth [ 2 + mem [(long) v ] .hh.b0 ] = breakwidth [ 2 + mem [(long)
- v ] .hh.b0 ] - mem [(long) v + 2 ] .cint ;
- breakwidth [ 6 ] = breakwidth [ 6 ] - mem [(long) v + 3 ] .cint ;
- }
- break ;
- case 12 :
- ;
- break ;
- case 9 :
- case 11 :
- if ( mem [(long) s ] .hh.b1 == 2 )
- goto lab30 ;
- else breakwidth [ 1 ] = breakwidth [ 1 ] - mem [(long) s + 1 ] .cint
- ;
- break ;
- default :
- goto lab30 ;
- break ;
- }
- s = mem [(long) s ] .hh .v.RH ;
- }
- lab30: ;
- }
- if ( mem [(long) prevr ] .hh.b0 == 2 )
- {
- mem [(long) prevr + 1 ] .cint = mem [(long) prevr + 1 ] .cint - curactivewid [
- 1 ] + breakwidth [ 1 ] ;
- mem [(long) prevr + 2 ] .cint = mem [(long) prevr + 2 ] .cint - curactivewid [
- 2 ] + breakwidth [ 2 ] ;
- mem [(long) prevr + 3 ] .cint = mem [(long) prevr + 3 ] .cint - curactivewid [
- 3 ] + breakwidth [ 3 ] ;
- mem [(long) prevr + 4 ] .cint = mem [(long) prevr + 4 ] .cint - curactivewid [
- 4 ] + breakwidth [ 4 ] ;
- mem [(long) prevr + 5 ] .cint = mem [(long) prevr + 5 ] .cint - curactivewid [
- 5 ] + breakwidth [ 5 ] ;
- mem [(long) prevr + 6 ] .cint = mem [(long) prevr + 6 ] .cint - curactivewid [
- 6 ] + breakwidth [ 6 ] ;
- }
- else if ( prevr == memtop - 7 )
- {
- activewidth [ 1 ] = breakwidth [ 1 ] ;
- activewidth [ 2 ] = breakwidth [ 2 ] ;
- activewidth [ 3 ] = breakwidth [ 3 ] ;
- activewidth [ 4 ] = breakwidth [ 4 ] ;
- activewidth [ 5 ] = breakwidth [ 5 ] ;
- activewidth [ 6 ] = breakwidth [ 6 ] ;
- }
- else {
- q = getnode ( 7 ) ;
- mem [(long) q ] .hh .v.RH = r ;
- mem [(long) q ] .hh.b0 = 2 ;
- mem [(long) q ] .hh.b1 = 0 ;
- mem [(long) q + 1 ] .cint = breakwidth [ 1 ] - curactivewid [ 1 ] ;
- mem [(long) q + 2 ] .cint = breakwidth [ 2 ] - curactivewid [ 2 ] ;
- mem [(long) q + 3 ] .cint = breakwidth [ 3 ] - curactivewid [ 3 ] ;
- mem [(long) q + 4 ] .cint = breakwidth [ 4 ] - curactivewid [ 4 ] ;
- mem [(long) q + 5 ] .cint = breakwidth [ 5 ] - curactivewid [ 5 ] ;
- mem [(long) q + 6 ] .cint = breakwidth [ 6 ] - curactivewid [ 6 ] ;
- mem [(long) prevr ] .hh .v.RH = q ;
- prevprevr = prevr ;
- prevr = q ;
- }
- minimumdemer = minimumdemer + abs ( eqtb [ 5283 ] .cint ) ;
- for ( fitclass = 0 ; fitclass <= 3 ; fitclass ++ )
- {
- if ( minimaldemer [ fitclass ] <= minimumdemer )
- {
- q = getnode ( 2 ) ;
- mem [(long) q ] .hh .v.RH = passive ;
- passive = q ;
- mem [(long) q + 1 ] .hh .v.RH = curp ;
-
- #ifdef STAT
- incr ( passnumber ) ;
- mem [(long) q ] .hh .v.LH = passnumber ;
- #endif /* STAT */
- mem [(long) q + 1 ] .hh .v.LH = bestplace [ fitclass ] ;
- q = getnode ( 3 ) ;
- mem [(long) q + 1 ] .hh .v.RH = passive ;
- mem [(long) q + 1 ] .hh .v.LH = bestplline [ fitclass ] + 1 ;
- mem [(long) q ] .hh.b1 = fitclass ;
- mem [(long) q ] .hh.b0 = breaktype ;
- mem [(long) q + 2 ] .cint = minimaldemer [ fitclass ] ;
- mem [(long) q ] .hh .v.RH = r ;
- mem [(long) prevr ] .hh .v.RH = q ;
- prevr = q ;
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- {
- printnl ( 779 ) ;
- printint ( mem [(long) passive ] .hh .v.LH ) ;
- print ( 780 ) ;
- printint ( mem [(long) q + 1 ] .hh .v.LH - 1 ) ;
- printchar ( 46 ) ;
- printint ( fitclass ) ;
- if ( breaktype == 1 )
- printchar ( 45 ) ;
- print ( 781 ) ;
- printint ( mem [(long) q + 2 ] .cint ) ;
- print ( 782 ) ;
- if ( mem [(long) passive + 1 ] .hh .v.LH == 0 )
- printchar ( 48 ) ;
- else printint ( mem [(long) mem [(long) passive + 1 ] .hh .v.LH ] .hh
- .v.LH ) ;
- }
- #endif /* STAT */
- }
- minimaldemer [ fitclass ] = 1073741823 ;
- }
- minimumdemer = 1073741823 ;
- if ( r != memtop - 7 )
- {
- q = getnode ( 7 ) ;
- mem [(long) q ] .hh .v.RH = r ;
- mem [(long) q ] .hh.b0 = 2 ;
- mem [(long) q ] .hh.b1 = 0 ;
- mem [(long) q + 1 ] .cint = curactivewid [ 1 ] - breakwidth [ 1 ] ;
- mem [(long) q + 2 ] .cint = curactivewid [ 2 ] - breakwidth [ 2 ] ;
- mem [(long) q + 3 ] .cint = curactivewid [ 3 ] - breakwidth [ 3 ] ;
- mem [(long) q + 4 ] .cint = curactivewid [ 4 ] - breakwidth [ 4 ] ;
- mem [(long) q + 5 ] .cint = curactivewid [ 5 ] - breakwidth [ 5 ] ;
- mem [(long) q + 6 ] .cint = curactivewid [ 6 ] - breakwidth [ 6 ] ;
- mem [(long) prevr ] .hh .v.RH = q ;
- prevprevr = prevr ;
- prevr = q ;
- }
- }
- if ( r == memtop - 7 )
- goto lab10 ;
- if ( l > easyline )
- {
- linewidth = secondwidth ;
- oldl = 65534 ;
- }
- else {
- oldl = l ;
- if ( l > lastspeciall )
- linewidth = secondwidth ;
- else if ( eqtb [ 4056 ] .hh .v.RH == 0 )
- linewidth = firstwidth ;
- else linewidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * l ] .cint ;
- }
- }
- }
- {
-
- #ifdef STAT
- artificialba = false ;
- #endif /* STAT */
- shortfall = linewidth - curactivewid [ 1 ] ;
- if ( shortfall > 0 )
- if ( ( curactivewid [ 3 ] != 0 ) || ( curactivewid [ 4 ] != 0 ) || (
- curactivewid [ 5 ] != 0 ) )
- {
- b = 0 ;
- fitclass = 2 ;
- }
- else {
- if ( shortfall > 7230584 )
- if ( curactivewid [ 2 ] < 1663497 )
- {
- b = 10000 ;
- fitclass = 0 ;
- goto lab31 ;
- }
- b = badness ( shortfall , curactivewid [ 2 ] ) ;
- if ( b > 12 )
- if ( b > 99 )
- fitclass = 0 ;
- else fitclass = 1 ;
- else fitclass = 2 ;
- lab31: ;
- }
- else {
- if ( - shortfall > curactivewid [ 6 ] )
- b = 10001 ;
- else b = badness ( - shortfall , curactivewid [ 6 ] ) ;
- if ( b > 12 )
- fitclass = 3 ;
- else fitclass = 2 ;
- }
- if ( ( b > 10000 ) || ( pi == - 10000 ) )
- {
- if ( secondpass && ( minimumdemer == 1073741823 ) && ( mem [(long) r ] .hh
- .v.RH == memtop - 7 ) && ( prevr == memtop - 7 ) )
- {
- b = 0 ;
-
- #ifdef STAT
- artificialba = true ;
- #endif /* STAT */
- }
- else if ( b > threshold )
- goto lab60 ;
- noderstaysac = false ;
- }
- else {
- prevr = r ;
- if ( b > threshold )
- goto lab22 ;
- noderstaysac = true ;
- }
- d = eqtb [ 5269 ] .cint + b ;
- d = d * d ;
- if ( pi != 0 )
- if ( pi > 0 )
- d = d + pi * pi ;
- else if ( pi > - 10000 )
- d = d - pi * pi ;
- if ( ( breaktype == 1 ) && ( mem [(long) r ] .hh.b0 == 1 ) )
- if ( curp != 0 )
- d = d + eqtb [ 5281 ] .cint ;
- else d = d + eqtb [ 5282 ] .cint ;
- if ( abs ( toint ( fitclass ) - toint ( mem [(long) r ] .hh.b1 ) ) > 1 )
- d = d + eqtb [ 5283 ] .cint ;
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- {
- if ( printednode != curp )
- {
- printnl ( 206 ) ;
- if ( curp == 0 )
- shortdisplay ( mem [(long) printednode ] .hh .v.RH ) ;
- else {
- savelink = mem [(long) curp ] .hh .v.RH ;
- mem [(long) curp ] .hh .v.RH = 0 ;
- printnl ( 206 ) ;
- shortdisplay ( mem [(long) printednode ] .hh .v.RH ) ;
- mem [(long) curp ] .hh .v.RH = savelink ;
- }
- printednode = curp ;
- }
- printnl ( 64 ) ;
- if ( curp == 0 )
- printesc ( 455 ) ;
- else if ( mem [(long) curp ] .hh.b0 != 10 )
- {
- if ( mem [(long) curp ] .hh.b0 == 12 )
- printesc ( 389 ) ;
- else if ( mem [(long) curp ] .hh.b0 == 7 )
- printesc ( 217 ) ;
- else if ( mem [(long) curp ] .hh.b0 == 11 )
- printesc ( 208 ) ;
- else printesc ( 211 ) ;
- }
- print ( 783 ) ;
- if ( mem [(long) r + 1 ] .hh .v.RH == 0 )
- printchar ( 48 ) ;
- else printint ( mem [(long) mem [(long) r + 1 ] .hh .v.RH ] .hh .v.LH ) ;
- print ( 784 ) ;
- if ( artificialba )
- printchar ( 42 ) ;
- else printint ( b ) ;
- print ( 785 ) ;
- printint ( pi ) ;
- print ( 786 ) ;
- printint ( d ) ;
- }
- #endif /* STAT */
- d = d + mem [(long) r + 2 ] .cint ;
- if ( d <= minimaldemer [ fitclass ] )
- {
- minimaldemer [ fitclass ] = d ;
- bestplace [ fitclass ] = mem [(long) r + 1 ] .hh .v.RH ;
- bestplline [ fitclass ] = l ;
- if ( d < minimumdemer )
- minimumdemer = d ;
- }
- if ( noderstaysac )
- goto lab22 ;
- lab60: mem [(long) prevr ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
- freenode ( r , 3 ) ;
- if ( prevr == memtop - 7 )
- {
- r = mem [(long) memtop - 7 ] .hh .v.RH ;
- if ( mem [(long) r ] .hh.b0 == 2 )
- {
- activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) r + 1 ] .cint ;
- activewidth [ 2 ] = activewidth [ 2 ] + mem [(long) r + 2 ] .cint ;
- activewidth [ 3 ] = activewidth [ 3 ] + mem [(long) r + 3 ] .cint ;
- activewidth [ 4 ] = activewidth [ 4 ] + mem [(long) r + 4 ] .cint ;
- activewidth [ 5 ] = activewidth [ 5 ] + mem [(long) r + 5 ] .cint ;
- activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) r + 6 ] .cint ;
- curactivewid [ 1 ] = activewidth [ 1 ] ;
- curactivewid [ 2 ] = activewidth [ 2 ] ;
- curactivewid [ 3 ] = activewidth [ 3 ] ;
- curactivewid [ 4 ] = activewidth [ 4 ] ;
- curactivewid [ 5 ] = activewidth [ 5 ] ;
- curactivewid [ 6 ] = activewidth [ 6 ] ;
- mem [(long) memtop - 7 ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
- freenode ( r , 7 ) ;
- }
- }
- else if ( mem [(long) prevr ] .hh.b0 == 2 )
- {
- r = mem [(long) prevr ] .hh .v.RH ;
- if ( r == memtop - 7 )
- {
- curactivewid [ 1 ] = curactivewid [ 1 ] - mem [(long) prevr + 1 ] .cint ;
- curactivewid [ 2 ] = curactivewid [ 2 ] - mem [(long) prevr + 2 ] .cint ;
- curactivewid [ 3 ] = curactivewid [ 3 ] - mem [(long) prevr + 3 ] .cint ;
- curactivewid [ 4 ] = curactivewid [ 4 ] - mem [(long) prevr + 4 ] .cint ;
- curactivewid [ 5 ] = curactivewid [ 5 ] - mem [(long) prevr + 5 ] .cint ;
- curactivewid [ 6 ] = curactivewid [ 6 ] - mem [(long) prevr + 6 ] .cint ;
- mem [(long) prevprevr ] .hh .v.RH = memtop - 7 ;
- freenode ( prevr , 7 ) ;
- prevr = prevprevr ;
- }
- else if ( mem [(long) r ] .hh.b0 == 2 )
- {
- curactivewid [ 1 ] = curactivewid [ 1 ] + mem [(long) r + 1 ] .cint ;
- curactivewid [ 2 ] = curactivewid [ 2 ] + mem [(long) r + 2 ] .cint ;
- curactivewid [ 3 ] = curactivewid [ 3 ] + mem [(long) r + 3 ] .cint ;
- curactivewid [ 4 ] = curactivewid [ 4 ] + mem [(long) r + 4 ] .cint ;
- curactivewid [ 5 ] = curactivewid [ 5 ] + mem [(long) r + 5 ] .cint ;
- curactivewid [ 6 ] = curactivewid [ 6 ] + mem [(long) r + 6 ] .cint ;
- mem [(long) prevr + 1 ] .cint = mem [(long) prevr + 1 ] .cint + mem [(long) r + 1 ]
- .cint ;
- mem [(long) prevr + 2 ] .cint = mem [(long) prevr + 2 ] .cint + mem [(long) r + 2 ]
- .cint ;
- mem [(long) prevr + 3 ] .cint = mem [(long) prevr + 3 ] .cint + mem [(long) r + 3 ]
- .cint ;
- mem [(long) prevr + 4 ] .cint = mem [(long) prevr + 4 ] .cint + mem [(long) r + 4 ]
- .cint ;
- mem [(long) prevr + 5 ] .cint = mem [(long) prevr + 5 ] .cint + mem [(long) r + 5 ]
- .cint ;
- mem [(long) prevr + 6 ] .cint = mem [(long) prevr + 6 ] .cint + mem [(long) r + 6 ]
- .cint ;
- mem [(long) prevr ] .hh .v.RH = mem [(long) r ] .hh .v.RH ;
- freenode ( r , 7 ) ;
- }
- }
- }
- }
- lab10:
-
- #ifdef STAT
- if ( curp == printednode )
- if ( curp != 0 )
- if ( mem [(long) curp ] .hh.b0 == 7 )
- {
- t = mem [(long) curp ] .hh.b1 ;
- while ( t > 0 ) {
- decr ( t ) ;
- printednode = mem [(long) printednode ] .hh .v.RH ;
- }
- }
- #endif /* STAT */
- ;
- }
- zpostlinebrea ( finalwidowpe )
- integer finalwidowpe ;
- {/* 30 31 */ r_postlinebrea
- halfword q, r, s ;
- boolean discbreak ;
- scaled curwidth ;
- scaled curindent ;
- quarterword t ;
- integer pen ;
- halfword curline ;
- q = mem [(long) bestbet + 1 ] .hh .v.RH ;
- curp = 0 ;
- do { r = q ;
- q = mem [(long) q + 1 ] .hh .v.LH ;
- mem [(long) r + 1 ] .hh .v.LH = curp ;
- curp = r ;
- } while ( ! ( q == 0 ) ) ;
- curline = curlist .pgfield + 1 ;
- do { q = mem [(long) curp + 1 ] .hh .v.RH ;
- discbreak = false ;
- if ( q != 0 )
- if ( mem [(long) q ] .hh.b0 == 10 )
- {
- deletegluere ( mem [(long) q + 1 ] .hh .v.LH ) ;
- mem [(long) q + 1 ] .hh .v.LH = eqtb [ 3534 ] .hh .v.RH ;
- mem [(long) q ] .hh.b1 = 9 ;
- incr ( mem [(long) eqtb [ 3534 ] .hh .v.RH ] .hh .v.RH ) ;
- goto lab30 ;
- }
- else {
- if ( mem [(long) q ] .hh.b0 == 7 )
- {
- t = mem [(long) q ] .hh.b1 ;
- if ( t == 0 )
- r = mem [(long) q ] .hh .v.RH ;
- else {
- r = q ;
- while ( t > 1 ) {
- r = mem [(long) r ] .hh .v.RH ;
- decr ( t ) ;
- }
- s = mem [(long) r ] .hh .v.RH ;
- if ( ! ( s >= himemmin ) )
- if ( mem [(long) curp + 1 ] .hh .v.LH != 0 )
- if ( mem [(long) mem [(long) curp + 1 ] .hh .v.LH + 1 ] .hh .v.RH == s )
- s = r ;
- r = mem [(long) s ] .hh .v.RH ;
- mem [(long) s ] .hh .v.RH = 0 ;
- flushnodelis ( mem [(long) q ] .hh .v.RH ) ;
- mem [(long) q ] .hh.b1 = 0 ;
- }
- if ( mem [(long) q + 1 ] .hh .v.RH != 0 )
- {
- s = mem [(long) q + 1 ] .hh .v.RH ;
- while ( mem [(long) s ] .hh .v.RH != 0 ) s = mem [(long) s ] .hh .v.RH ;
- mem [(long) s ] .hh .v.RH = r ;
- r = mem [(long) q + 1 ] .hh .v.RH ;
- mem [(long) q + 1 ] .hh .v.RH = 0 ;
- }
- if ( mem [(long) q + 1 ] .hh .v.LH != 0 )
- {
- s = mem [(long) q + 1 ] .hh .v.LH ;
- mem [(long) q ] .hh .v.RH = s ;
- while ( mem [(long) s ] .hh .v.RH != 0 ) s = mem [(long) s ] .hh .v.RH ;
- mem [(long) q + 1 ] .hh .v.LH = 0 ;
- q = s ;
- }
- mem [(long) q ] .hh .v.RH = r ;
- discbreak = true ;
- }
- else if ( ( mem [(long) q ] .hh.b0 == 9 ) || ( mem [(long) q ] .hh.b0 == 11 ) )
- mem [(long) q + 1 ] .cint = 0 ;
- }
- else {
- q = memtop - 3 ;
- while ( mem [(long) q ] .hh .v.RH != 0 ) q = mem [(long) q ] .hh .v.RH ;
- }
- r = newparamglue ( 8 ) ;
- mem [(long) r ] .hh .v.RH = mem [(long) q ] .hh .v.RH ;
- mem [(long) q ] .hh .v.RH = r ;
- q = r ;
- lab30: ;
- r = mem [(long) q ] .hh .v.RH ;
- mem [(long) q ] .hh .v.RH = 0 ;
- q = mem [(long) memtop - 3 ] .hh .v.RH ;
- mem [(long) memtop - 3 ] .hh .v.RH = r ;
- if ( eqtb [ 3533 ] .hh .v.RH != 0 )
- {
- r = newparamglue ( 7 ) ;
- mem [(long) r ] .hh .v.RH = q ;
- q = r ;
- }
- if ( curline > lastspeciall )
- {
- curwidth = secondwidth ;
- curindent = secondindent ;
- }
- else if ( eqtb [ 4056 ] .hh .v.RH == 0 )
- {
- curwidth = firstwidth ;
- curindent = firstindent ;
- }
- else {
- curwidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * curline ] .cint ;
- curindent = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * curline - 1 ] .cint ;
- }
- adjusttail = memtop - 5 ;
- justbox = hpack ( q , curwidth , 0 ) ;
- mem [(long) justbox + 4 ] .cint = curindent ;
- appendtovlis ( justbox ) ;
- if ( memtop - 5 != adjusttail )
- {
- mem [(long) curlist .tailfield ] .hh .v.RH = mem [(long) memtop - 5 ] .hh .v.RH ;
- curlist .tailfield = adjusttail ;
- }
- adjusttail = 0 ;
- if ( curline + 1 != bestline )
- {
- pen = eqtb [ 5280 ] .cint ;
- if ( curline == curlist .pgfield + 1 )
- pen = pen + eqtb [ 5272 ] .cint ;
- if ( curline + 2 == bestline )
- pen = pen + finalwidowpe ;
- if ( discbreak )
- pen = pen + eqtb [ 5275 ] .cint ;
- if ( pen != 0 )
- {
- r = newpenalty ( pen ) ;
- mem [(long) curlist .tailfield ] .hh .v.RH = r ;
- curlist .tailfield = r ;
- }
- }
- incr ( curline ) ;
- curp = mem [(long) curp + 1 ] .hh .v.LH ;
- if ( curp != 0 )
- {
- r = memtop - 3 ;
- while ( true ) {
- q = mem [(long) r ] .hh .v.RH ;
- if ( q == mem [(long) curp + 1 ] .hh .v.RH )
- goto lab31 ;
- if ( ( q >= himemmin ) )
- goto lab31 ;
- if ( ( mem [(long) q ] .hh.b0 < 9 ) )
- goto lab31 ;
- if ( mem [(long) q ] .hh.b1 == 2 )
- if ( mem [(long) q ] .hh.b0 == 11 )
- goto lab31 ;
- r = q ;
- }
- lab31: if ( r != memtop - 3 )
- {
- mem [(long) r ] .hh .v.RH = 0 ;
- flushnodelis ( mem [(long) memtop - 3 ] .hh .v.RH ) ;
- mem [(long) memtop - 3 ] .hh .v.RH = q ;
- }
- }
- } while ( ! ( curp == 0 ) ) ;
- if ( ( curline != bestline ) || ( mem [(long) memtop - 3 ] .hh .v.RH != 0 ) )
- confusion ( 791 ) ;
- curlist .pgfield = bestline - 1 ;
- }
- smallnumber zreconstitute ( j , n )
- smallnumber j , n ;
- {/* 22 30 */ register smallnumber Result; r_reconstitute
- halfword p ;
- halfword s ;
- fourquarters q ;
- quarterword c ;
- quarterword d ;
- scaled w ;
- integer r ;
- hyphenpassed = 0 ;
- s = memtop - 4 ;
- w = 0 ;
- d = hu [ j ] ;
- c = d ;
- while ( true ) {
- lab22: p = getavail () ;
- mem [(long) p ] .hh.b0 = hf ;
- mem [(long) p ] .hh.b1 = c ;
- mem [(long) s ] .hh .v.RH = p ;
- if ( j == n )
- goto lab30 ;
- q = fontinfo [ charbase [ hf ] + d ] .qqqq ;
- if ( ( ( q .b2 ) % 4 ) != 1 )
- goto lab30 ;
- r = ligkernbase [ hf ] + q .b3 ;
- c = hu [ j + 1 ] ;
- while ( true ) {
- q = fontinfo [ r ] .qqqq ;
- if ( q .b1 == c )
- {
- if ( odd ( hyf [ j ] ) && ( hyphenpassed == 0 ) )
- hyphenpassed = j ;
- if ( q .b2 < 128 )
- {
- d = q .b3 ;
- incr ( j ) ;
- s = p ;
- goto lab22 ;
- }
- else {
- w = fontinfo [ kernbase [ hf ] + q .b3 ] .cint ;
- goto lab30 ;
- }
- }
- else if ( q .b0 < 128 )
- incr ( r ) ;
- else goto lab30 ;
- }
- }
- lab30: ;
- if ( s != memtop - 4 )
- {
- p = newligature ( hf , d , mem [(long) memtop - 4 ] .hh .v.RH ) ;
- mem [(long) memtop - 4 ] .hh .v.RH = p ;
- }
- if ( w != 0 )
- mem [(long) mem [(long) memtop - 4 ] .hh .v.RH ] .hh .v.RH = newkern ( w ) ;
- Result = j ;
- return(Result) ;
- }
- hyphenate () { /* 30 40 45 41 10 */ r_hyphenate
- quarterword i, j, l ;
- halfword q, r, s ;
- halfword majortail, minortail ;
- ASCIIcode c ;
- halfword hyfnode ;
- triepointer z ;
- quarterword v ;
- hyphpointer h ;
- strnumber k ;
- poolpointer u ;
- for ( j = 0 ; j <= hn ; j ++ )
- hyf [ j ] = 0 ;
- h = hc [ 1 ] ;
- for ( j = 2 ; j <= hn ; j ++ )
- h = ( h + h + hc [ j ] ) % 307 ;
- while ( true ) {
- k = hyphword [ h ] ;
- if ( k == 0 )
- goto lab45 ;
- if ( ( strstart [ k + 1 ] - strstart [ k ] ) < hn )
- goto lab45 ;
- if ( ( strstart [ k + 1 ] - strstart [ k ] ) == hn )
- {
- j = 1 ;
- u = strstart [ k ] ;
- do { if ( strpool [ u ] < hc [ j ] )
- goto lab45 ;
- if ( strpool [ u ] > hc [ j ] )
- goto lab30 ;
- incr ( j ) ;
- incr ( u ) ;
- } while ( ! ( j > hn ) ) ;
- s = hyphlist [ h ] ;
- while ( s != 0 ) {
- hyf [ mem [(long) s ] .hh .v.LH ] = 1 ;
- s = mem [(long) s ] .hh .v.RH ;
- }
- goto lab40 ;
- }
- lab30: ;
- if ( h > 0 )
- decr ( h ) ;
- else h = 307 ;
- }
- lab45: ;
- hc [ 0 ] = 127 ;
- hc [ hn + 1 ] = 127 ;
- hc [ hn + 2 ] = 256 ;
- for ( j = 0 ; j <= hn - 2 ; j ++ )
- {
- z = hc [ j ] ;
- l = j ;
- while ( hc [ l ] == trie [ z ] .b1 ) {
- if ( trie [ z ] .b0 != 0 )
- {
- v = trie [ z ] .b0 ;
- do { i = l - hyfdistance [ v ] ;
- if ( hyfnum [ v ] > hyf [ i ] )
- hyf [ i ] = hyfnum [ v ] ;
- v = hyfnext [ v ] ;
- } while ( ! ( v == 0 ) ) ;
- }
- incr ( l ) ;
- z = trie [ z ] .v.RH + hc [ l ] ;
- }
- }
- lab40: hyf [ 1 ] = 0 ;
- hyf [ hn - 2 ] = 0 ;
- hyf [ hn - 1 ] = 0 ;
- hyf [ hn ] = 0 ;
- for ( j = 2 ; j <= hn - 3 ; j ++ )
- if ( odd ( hyf [ j ] ) )
- goto lab41 ;
- return ;
- lab41: ;
- q = mem [(long) hb ] .hh .v.RH ;
- mem [(long) hb ] .hh .v.RH = 0 ;
- s = curp ;
- while ( mem [(long) s ] .hh .v.RH != ha ) s = mem [(long) s ] .hh .v.RH ;
- mem [(long) s ] .hh .v.RH = 0 ;
- flushnodelis ( ha ) ;
- j = 0 ;
- do { l = j ;
- j = reconstitute ( j + 1 , hn ) ;
- if ( hyphenpassed != 0 )
- {
- r = getnode ( 2 ) ;
- mem [(long) s ] .hh .v.RH = r ;
- mem [(long) r ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- mem [(long) r ] .hh.b0 = 7 ;
- majortail = mem [(long) memtop - 4 ] .hh .v.RH ;
- if ( mem [(long) majortail ] .hh .v.RH != 0 )
- majortail = mem [(long) majortail ] .hh .v.RH ;
- i = hyphenpassed ;
- minortail = 0 ;
- hyfnode = newcharacter ( hf , hyfchar ) ;
- if ( hyfnode != 0 )
- {
- incr ( i ) ;
- c = hu [ i ] ;
- hu [ i ] = hyfchar ;
- }
- do { l = reconstitute ( l + 1 , i ) ;
- if ( minortail == 0 )
- mem [(long) r + 1 ] .hh .v.LH = mem [(long) memtop - 4 ] .hh .v.RH ;
- else mem [(long) minortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- minortail = mem [(long) memtop - 4 ] .hh .v.RH ;
- if ( mem [(long) minortail ] .hh .v.RH != 0 )
- minortail = mem [(long) minortail ] .hh .v.RH ;
- } while ( ! ( l == i ) ) ;
- if ( hyfnode != 0 )
- {
- hu [ i ] = c ;
- {
- mem [(long) hyfnode ] .hh .v.RH = avail ;
- avail = hyfnode ;
-
- #ifdef STAT
- decr ( dynused ) ;
- #endif /* STAT */
- }
- decr ( i ) ;
- l = i ;
- }
- hyf [ i ] = 0 ;
- minortail = 0 ;
- mem [(long) r + 1 ] .hh .v.RH = 0 ;
- while ( l < j ) {
- do { l = reconstitute ( l + 1 , hn ) ;
- if ( minortail == 0 )
- mem [(long) r + 1 ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- else mem [(long) minortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- minortail = mem [(long) memtop - 4 ] .hh .v.RH ;
- if ( mem [(long) minortail ] .hh .v.RH != 0 )
- {
- hyf [ l ] = 0 ;
- minortail = mem [(long) minortail ] .hh .v.RH ;
- }
- } while ( ! ( l >= j ) ) ;
- while ( l > j ) {
- j = reconstitute ( j + 1 , hn ) ;
- mem [(long) majortail ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- majortail = mem [(long) memtop - 4 ] .hh .v.RH ;
- if ( mem [(long) majortail ] .hh .v.RH != 0 )
- {
- hyf [ j ] = 0 ;
- majortail = mem [(long) majortail ] .hh .v.RH ;
- }
- }
- }
- i = 0 ;
- s = r ;
- while ( mem [(long) s ] .hh .v.RH != 0 ) {
- incr ( i ) ;
- s = mem [(long) s ] .hh .v.RH ;
- }
- mem [(long) r ] .hh.b1 = i ;
- }
- else {
- mem [(long) s ] .hh .v.RH = mem [(long) memtop - 4 ] .hh .v.RH ;
- s = mem [(long) s ] .hh .v.RH ;
- if ( mem [(long) s ] .hh .v.RH != 0 )
- s = mem [(long) s ] .hh .v.RH ;
- }
- if ( odd ( hyf [ j ] ) )
- {
- r = newdisc () ;
- mem [(long) r + 1 ] .hh .v.LH = newcharacter ( hf , hyfchar ) ;
- mem [(long) s ] .hh .v.RH = r ;
- s = r ;
- }
- } while ( ! ( j == hn ) ) ;
- mem [(long) s ] .hh .v.RH = q ;
- }
- zlinebreak ( finalwidowpe )
- integer finalwidowpe ;
- {/* 30 31 32 33 34 */ r_linebreak
- boolean autobreaking ;
- halfword prevp ;
- halfword q, r, s ;
- internalfont f ;
- smallnumber j ;
- quarterword c ;
- fourquarters qi;
- packbeginlin = curlist .mlfield ;
- mem [(long) memtop - 3 ] .hh .v.RH = mem [(long) curlist .headfield ] .hh .v.RH ;
- if ( ( curlist .tailfield >= himemmin ) )
- {
- mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ;
- curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ;
- }
- else if ( mem [(long) curlist .tailfield ] .hh.b0 != 10 )
- {
- mem [(long) curlist .tailfield ] .hh .v.RH = newpenalty ( 10000 ) ;
- curlist .tailfield = mem [(long) curlist .tailfield ] .hh .v.RH ;
- }
- else {
- mem [(long) curlist .tailfield ] .hh.b0 = 12 ;
- deletegluere ( mem [(long) curlist .tailfield + 1 ] .hh .v.LH ) ;
- flushnodelis ( mem [(long) curlist .tailfield + 1 ] .hh .v.RH ) ;
- mem [(long) curlist .tailfield + 1 ] .cint = 10000 ;
- }
- mem [(long) curlist .tailfield ] .hh .v.RH = newparamglue ( 14 ) ;
- popnest () ;
- noshrinkerro = true ;
- if ( ( mem [(long) eqtb [ 3533 ] .hh .v.RH ] .hh.b1 != 0 ) && ( mem [(long) eqtb [ 3533
- ] .hh .v.RH + 3 ] .cint != 0 ) )
- {
- eqtb [ 3533 ] .hh .v.RH = finiteshrink ( eqtb [ 3533 ] .hh .v.RH ) ;
- }
- if ( ( mem [(long) eqtb [ 3534 ] .hh .v.RH ] .hh.b1 != 0 ) && ( mem [(long) eqtb [ 3534
- ] .hh .v.RH + 3 ] .cint != 0 ) )
- {
- eqtb [ 3534 ] .hh .v.RH = finiteshrink ( eqtb [ 3534 ] .hh .v.RH ) ;
- }
- q = eqtb [ 3533 ] .hh .v.RH ;
- r = eqtb [ 3534 ] .hh .v.RH ;
- background [ 1 ] = mem [(long) q + 1 ] .cint + mem [(long) r + 1 ] .cint ;
- background [ 2 ] = 0 ;
- background [ 3 ] = 0 ;
- background [ 4 ] = 0 ;
- background [ 5 ] = 0 ;
- background [ 2 + mem [(long) q ] .hh.b0 ] = mem [(long) q + 2 ] .cint ;
- background [ 2 + mem [(long) r ] .hh.b0 ] = background [ 2 + mem [(long) r ] .hh.b0 ] +
- mem [(long) r + 2 ] .cint ;
- background [ 6 ] = mem [(long) q + 3 ] .cint + mem [(long) r + 3 ] .cint ;
- minimumdemer = 1073741823 ;
- minimaldemer [ 3 ] = 1073741823 ;
- minimaldemer [ 2 ] = 1073741823 ;
- minimaldemer [ 1 ] = 1073741823 ;
- minimaldemer [ 0 ] = 1073741823 ;
- if ( eqtb [ 4056 ] .hh .v.RH == 0 )
- if ( eqtb [ 5718 ] .cint == 0 )
- {
- lastspeciall = 0 ;
- secondwidth = eqtb [ 5704 ] .cint ;
- secondindent = 0 ;
- }
- else {
- lastspeciall = abs ( eqtb [ 5308 ] .cint ) ;
- if ( eqtb [ 5308 ] .cint < 0 )
- {
- firstwidth = eqtb [ 5704 ] .cint - abs ( eqtb [ 5718 ] .cint ) ;
- if ( eqtb [ 5718 ] .cint >= 0 )
- firstindent = eqtb [ 5718 ] .cint ;
- else firstindent = 0 ;
- secondwidth = eqtb [ 5704 ] .cint ;
- secondindent = 0 ;
- }
- else {
- firstwidth = eqtb [ 5704 ] .cint ;
- firstindent = 0 ;
- secondwidth = eqtb [ 5704 ] .cint - abs ( eqtb [ 5718 ] .cint ) ;
- if ( eqtb [ 5718 ] .cint >= 0 )
- secondindent = eqtb [ 5718 ] .cint ;
- else secondindent = 0 ;
- }
- }
- else {
- lastspeciall = mem [(long) eqtb [ 4056 ] .hh .v.RH ] .hh .v.LH - 1 ;
- secondwidth = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * ( lastspeciall + 1 ) ]
- .cint ;
- secondindent = mem [(long) eqtb [ 4056 ] .hh .v.RH + 2 * lastspeciall + 1 ]
- .cint ;
- }
- if ( eqtb [ 5286 ] .cint == 0 )
- easyline = lastspeciall ;
- else easyline = 65535L ;
- threshold = eqtb [ 5267 ] .cint ;
- if ( threshold >= 0 )
- {
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- {
- begindiagnos () ;
- printnl ( 787 ) ;
- }
- #endif /* STAT */
- secondpass = false ;
- }
- else {
- threshold = eqtb [ 5268 ] .cint ;
- secondpass = true ;
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- begindiagnos () ;
- #endif /* STAT */
- }
- while ( true ) {
- q = getnode ( 3 ) ;
- mem [(long) q ] .hh.b0 = 0 ;
- mem [(long) q ] .hh.b1 = 2 ;
- mem [(long) q ] .hh .v.RH = memtop - 7 ;
- mem [(long) q + 1 ] .hh .v.RH = 0 ;
- mem [(long) q + 1 ] .hh .v.LH = curlist .pgfield + 1 ;
- mem [(long) q + 2 ] .cint = 0 ;
- mem [(long) memtop - 7 ] .hh .v.RH = q ;
- activewidth [ 1 ] = background [ 1 ] ;
- activewidth [ 2 ] = background [ 2 ] ;
- activewidth [ 3 ] = background [ 3 ] ;
- activewidth [ 4 ] = background [ 4 ] ;
- activewidth [ 5 ] = background [ 5 ] ;
- activewidth [ 6 ] = background [ 6 ] ;
- passive = 0 ;
- printednode = memtop - 3 ;
- passnumber = 0 ;
- fontinshortd = 0 ;
- curp = mem [(long) memtop - 3 ] .hh .v.RH ;
- autobreaking = true ;
- prevp = curp ;
- while ( ( curp != 0 ) && ( mem [(long) memtop - 7 ] .hh .v.RH != memtop - 7 ) )
- {
- if ( ( curp >= himemmin ) )
- {
- prevp = curp ;
- do { f = mem [(long) curp ] .hh.b0 ;
- /* activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
- fontinfo [ charbase [ f ] + mem [(long) curp ] .hh.b1 ] .qqqq .b0 ] .cint
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) curp ] .hh.b1 ] .qqqq ;
- activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
- qi .b0 ] .cint
- ;
- curp = mem [(long) curp ] .hh .v.RH ;
- } while ( ! ( ! ( curp >= himemmin ) ) ) ;
- }
- switch ( mem [(long) curp ] .hh.b0 )
- {case 0 :
- case 1 :
- case 2 :
- activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
- break ;
- case 8 :
-
- break ;
- case 10 :
- {
- if ( autobreaking )
- {
- if ( ( prevp >= himemmin ) )
- trybreak ( 0 , 0 ) ;
- else if ( ( mem [(long) prevp ] .hh.b0 < 9 ) )
- trybreak ( 0 , 0 ) ;
- }
- {
- if ( ( mem [(long) mem [(long) curp + 1 ] .hh .v.LH ] .hh.b1 != 0 ) && ( mem [(long)
- mem [(long) curp + 1 ] .hh .v.LH + 3 ] .cint != 0 ) )
- {
- mem [(long) curp + 1 ] .hh .v.LH = finiteshrink ( mem [(long) curp + 1 ] .hh
- .v.LH ) ;
- }
- q = mem [(long) curp + 1 ] .hh .v.LH ;
- activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) q + 1 ] .cint ;
- activewidth [ 2 + mem [(long) q ] .hh.b0 ] = activewidth [ 2 + mem [(long) q ]
- .hh.b0 ] + mem [(long) q + 2 ] .cint ;
- activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) q + 3 ] .cint ;
- }
- if ( secondpass && autobreaking )
- {
- s = mem [(long) curp ] .hh .v.RH ;
- if ( s != 0 )
- {
- while ( true ) {
- if ( ( s >= himemmin ) )
- {
- c = mem [(long) s ] .hh.b1 ;
- hf = mem [(long) s ] .hh.b0 ;
- }
- else if ( mem [(long) s ] .hh.b0 == 6 )
- {
- q = mem [(long) s + 1 ] .hh .v.RH ;
- c = mem [(long) q ] .hh.b1 ;
- hf = mem [(long) q ] .hh.b0 ;
- }
- else if ( ( mem [(long) s ] .hh.b0 == 11 ) && ( mem [(long) s ] .hh.b1 ==
- 0 ) )
- c = 128 ;
- else if ( mem [(long) s ] .hh.b0 == 8 )
- c = 128 ;
- else goto lab31 ;
- if ( c < 128 )
- if ( eqtb [ 4755 + c ] .hh .v.RH != 0 )
- if ( ( eqtb [ 4755 + c ] .hh .v.RH == c ) || ( eqtb [ 5305 ]
- .cint > 0 ) )
- goto lab32 ;
- else goto lab31 ;
- s = mem [(long) s ] .hh .v.RH ;
- }
- lab32: hyfchar = hyphenchar [ hf ] ;
- if ( hyfchar < 0 )
- goto lab31 ;
- if ( hyfchar > 255 )
- goto lab31 ;
- ha = s ;
- hn = 0 ;
- while ( true ) {
- if ( ( s >= himemmin ) )
- {
- if ( mem [(long) s ] .hh.b0 != hf )
- goto lab33 ;
- c = mem [(long) s ] .hh.b1 ;
- if ( c >= 128 )
- goto lab33 ;
- if ( ( eqtb [ 4755 + c ] .hh .v.RH == 0 ) || ( hn == 63 ) )
- goto lab33 ;
- hb = s ;
- incr ( hn ) ;
- hu [ hn ] = c ;
- hc [ hn ] = eqtb [ 4755 + c ] .hh .v.RH - 1 ;
- }
- else if ( mem [(long) s ] .hh.b0 == 6 )
- {
- j = hn ;
- q = mem [(long) s + 1 ] .hh .v.RH ;
- if ( mem [(long) q ] .hh.b0 != hf )
- goto lab33 ;
- do { c = mem [(long) q ] .hh.b1 ;
- if ( c >= 128 )
- goto lab33 ;
- if ( ( eqtb [ 4755 + c ] .hh .v.RH == 0 ) || ( j == 63 ) )
- goto lab33 ;
- incr ( j ) ;
- hu [ j ] = c ;
- hc [ j ] = eqtb [ 4755 + c ] .hh .v.RH - 1 ;
- q = mem [(long) q ] .hh .v.RH ;
- } while ( ! ( q == 0 ) ) ;
- hb = s ;
- hn = j ;
- }
- else if ( ( mem [(long) s ] .hh.b0 != 11 ) || ( mem [(long) s ] .hh.b1 !=
- 0 ) )
- goto lab33 ;
- s = mem [(long) s ] .hh .v.RH ;
- }
- lab33: ;
- if ( hn < 5 )
- goto lab31 ;
- while ( true ) {
- if ( ! ( ( s >= himemmin ) ) )
- switch ( mem [(long) s ] .hh.b0 )
- {case 6 :
- ;
- break ;
- case 11 :
- if ( mem [(long) s ] .hh.b1 != 0 )
- goto lab34 ;
- break ;
- case 8 :
- case 10 :
- case 12 :
- case 3 :
- case 5 :
- case 4 :
- goto lab34 ;
- break ;
- default :
- goto lab31 ;
- break ;
- }
- s = mem [(long) s ] .hh .v.RH ;
- }
- lab34: ;
- hyphenate () ;
- }
- lab31: ;
- }
- }
- break ;
- case 11 :
- {
- if ( ! ( mem [(long) curp ] .hh .v.RH >= himemmin ) && autobreaking )
- if ( mem [(long) mem [(long) curp ] .hh .v.RH ] .hh.b0 == 10 )
- trybreak ( 0 , 0 ) ;
- activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
- }
- break ;
- case 6 :
- {
- f = mem [(long) curp + 1 ] .hh.b0 ;
- /* activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
- fontinfo [ charbase [ f ] + mem [(long) curp + 1 ] .hh.b1 ] .qqqq .b0 ]
- .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) curp + 1 ] .hh.b1 ] .qqqq;
- activewidth [ 1 ] = activewidth [ 1 ] + fontinfo [ widthbase [ f ] +
- qi.b0 ] .cint ;
- }
- break ;
- case 7 :
- {
- s = mem [(long) curp + 1 ] .hh .v.LH ;
- discwidth = 0 ;
- if ( s == 0 )
- trybreak ( eqtb [ 5271 ] .cint , 1 ) ;
- else {
- do { if ( ( s >= himemmin ) )
- {
- f = mem [(long) s ] .hh.b0 ;
- /* discwidth = discwidth + fontinfo [ widthbase [ f ] + fontinfo
- [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq .b0 ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) s ] .hh.b1 ] .qqqq;
- discwidth = discwidth + fontinfo [ widthbase [ f ] + qi .b0 ] .cint ;
-
- }
- else switch ( mem [(long) s ] .hh.b0 )
- {case 6 :
- {
- f = mem [(long) s + 1 ] .hh.b0 ;
- /* discwidth = discwidth + fontinfo [ widthbase [ f ] +
- fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ] .qqqq .b0
- ] .cint ;
- */
- qi = fontinfo [ charbase [ f ] + mem [(long) s + 1 ] .hh.b1 ] .qqqq;
- discwidth = discwidth + fontinfo [ widthbase [ f ] +
- qi .b0 ] .cint ;
-
- }
- break ;
- case 0 :
- case 1 :
- case 2 :
- case 11 :
- discwidth = discwidth + mem [(long) s + 1 ] .cint ;
- break ;
- default :
- confusion ( 790 ) ;
- break ;
- }
- s = mem [(long) s ] .hh .v.RH ;
- } while ( ! ( s == 0 ) ) ;
- activewidth [ 1 ] = activewidth [ 1 ] + discwidth ;
- trybreak ( eqtb [ 5270 ] .cint , 1 ) ;
- activewidth [ 1 ] = activewidth [ 1 ] - discwidth ;
- }
- }
- break ;
- case 9 :
- {
- autobreaking = ( mem [(long) curp ] .hh.b1 == 1 ) ;
- {
- if ( ! ( mem [(long) curp ] .hh .v.RH >= himemmin ) && autobreaking )
- if ( mem [(long) mem [(long) curp ] .hh .v.RH ] .hh.b0 == 10 )
- trybreak ( 0 , 0 ) ;
- activewidth [ 1 ] = activewidth [ 1 ] + mem [(long) curp + 1 ] .cint ;
- }
- }
- break ;
- case 12 :
- trybreak ( mem [(long) curp + 1 ] .cint , 0 ) ;
- break ;
- case 4 :
- case 3 :
- case 5 :
-
- break ;
- default :
- confusion ( 789 ) ;
- break ;
- }
- prevp = curp ;
- curp = mem [(long) curp ] .hh .v.RH ;
- }
- if ( curp == 0 )
- {
- trybreak ( - 10000 , 1 ) ;
- if ( mem [(long) memtop - 7 ] .hh .v.RH != memtop - 7 )
- {
- r = mem [(long) memtop - 7 ] .hh .v.RH ;
- fewestdemeri = 1073741823 ;
- do { if ( mem [(long) r ] .hh.b0 != 2 )
- if ( mem [(long) r + 2 ] .cint < fewestdemeri )
- {
- fewestdemeri = mem [(long) r + 2 ] .cint ;
- bestbet = r ;
- }
- r = mem [(long) r ] .hh .v.RH ;
- } while ( ! ( r == memtop - 7 ) ) ;
- bestline = mem [(long) bestbet + 1 ] .hh .v.LH ;
- if ( eqtb [ 5286 ] .cint == 0 )
- goto lab30 ;
- {
- r = mem [(long) memtop - 7 ] .hh .v.RH ;
- actualloosen = 0 ;
- do { if ( mem [(long) r ] .hh.b0 != 2 )
- {
- linediff = (long)mem [(long) r + 1 ] .hh .v.LH -(long)bestline ;
- if ( ( ( linediff < actualloosen ) && ( eqtb [ 5286 ] .cint <=
- linediff ) ) || ( ( linediff > actualloosen ) && ( eqtb [ 5286 ]
- .cint >= linediff ) ) )
- {
- bestbet = r ;
- actualloosen = linediff ;
- fewestdemeri = mem [(long) r + 2 ] .cint ;
- }
- else if ( ( linediff == actualloosen ) && ( mem [(long) r + 2 ] .cint
- < fewestdemeri ) )
- {
- bestbet = r ;
- fewestdemeri = mem [(long) r + 2 ] .cint ;
- }
- }
- r = mem [(long) r ] .hh .v.RH ;
- } while ( ! ( r == memtop - 7 ) ) ;
- bestline = mem [(long) bestbet + 1 ] .hh .v.LH ;
- }
- if ( ( actualloosen == eqtb [ 5286 ] .cint ) || secondpass )
- goto lab30 ;
- }
- }
- q = mem [(long) memtop - 7 ] .hh .v.RH ;
- while ( q != memtop - 7 ) {
- curp = mem [(long) q ] .hh .v.RH ;
- if ( mem [(long) q ] .hh.b0 == 2 )
- freenode ( q , 7 ) ;
- else freenode ( q , 3 ) ;
- q = curp ;
- }
- q = passive ;
- while ( q != 0 ) {
- curp = mem [(long) q ] .hh .v.RH ;
- freenode ( q , 2 ) ;
- q = curp ;
- }
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- printnl ( 788 ) ;
- #endif /* STAT */
- threshold = eqtb [ 5268 ] .cint ;
- secondpass = true ;
- }
- lab30:
-
- #ifdef STAT
- if ( eqtb [ 5299 ] .cint > 0 )
- enddiagnosti ( true ) ;
- #endif /* STAT */
- postlinebrea ( finalwidowpe ) ;
- q = mem [(long) memtop - 7 ] .hh .v.RH ;
- while ( q != memtop - 7 ) {
- curp = mem [(long) q ] .hh .v.RH ;
- if ( mem [(long) q ] .hh.b0 == 2 )
- freenode ( q , 7 ) ;
- else freenode ( q , 3 ) ;
- q = curp ;
- }
- q = passive ;
- while ( q != 0 ) {
- curp = mem [(long) q ] .hh .v.RH ;
- freenode ( q , 2 ) ;
- q = curp ;
- }
- packbeginlin = 0 ;
- }
- newhyphexcep () { /* 21 10 40 45 30 */ r_newhyphexcep
- smallnumber n ;
- smallnumber j ;
- hyphpointer h ;
- strnumber k ;
- halfword p ;
- halfword q ;
- strnumber s, t ;
- poolpointer u, v ;
- scanleftbrac () ;
- n = 0 ;
- p = 0 ;
- while ( true ) {
- getxtoken () ;
- lab21: switch ( curcmd )
- {case 11 :
- case 12 :
- case 67 :
- if ( curchr == 45 )
- {
- if ( n > 1 )
- {
- q = getavail () ;
- mem [(long) q ] .hh .v.RH = p ;
- mem [(long) q ] .hh .v.LH = n ;
- p = q ;
- }
- }
- else {
- if ( ( curchr > 127 ) || ( eqtb [ 4755 + curchr ] .hh .v.RH == 0 ) )
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 797 ) ;
- }
- {
- helpptr = 2 ;
- helpline [ 1 ] = 798 ;
- helpline [ 0 ] = 799 ;
- }
- error () ;
- }
- else if ( n < 63 )
- {
- incr ( n ) ;
- hc [ n ] = eqtb [ 4755 + curchr ] .hh .v.RH - 1 ;
- }
- }
- break ;
- case 16 :
- {
- scancharnum () ;
- curchr = curval ;
- curcmd = 67 ;
- goto lab21 ;
- }
- break ;
- case 10 :
- case 2 :
- {
- if ( n > 4 )
- {
- {
- if ( poolptr + n > poolsize )
- overflow ( 128 , poolsize - initpoolptr ) ;
- }
- h = 0 ;
- for ( j = 1 ; j <= n ; j ++ )
- {
- h = ( h + h + hc [ j ] ) % 307 ;
- {
- strpool [ poolptr ] = hc [ j ] ;
- incr ( poolptr ) ;
- }
- }
- s = makestring () ;
- while ( true ) {
- if ( p == 0 )
- goto lab30 ;
- if ( mem [(long) p ] .hh .v.LH < n - 2 )
- goto lab30 ;
- q = mem [(long) p ] .hh .v.RH ;
- {
- mem [(long) p ] .hh .v.RH = avail ;
- avail = p ;
-
- #ifdef STAT
- decr ( dynused ) ;
- #endif /* STAT */
- }
- p = q ;
- }
- lab30: if ( hyphcount == 307 )
- overflow ( 800 , 307 ) ;
- incr ( hyphcount ) ;
- while ( hyphword [ h ] != 0 ) {
- k = hyphword [ h ] ;
- if ( ( strstart [ k + 1 ] - strstart [ k ] ) < ( strstart [ s + 1
- ] - strstart [ s ] ) )
- goto lab40 ;
- if ( ( strstart [ k + 1 ] - strstart [ k ] ) > ( strstart [ s + 1
- ] - strstart [ s ] ) )
- goto lab45 ;
- u = strstart [ k ] ;
- v = strstart [ s ] ;
- do { if ( strpool [ u ] < strpool [ v ] )
- goto lab40 ;
- if ( strpool [ u ] > strpool [ v ] )
- goto lab45 ;
- incr ( u ) ;
- incr ( v ) ;
- } while ( ! ( u == strstart [ k + 1 ] ) ) ;
- lab40: q = hyphlist [ h ] ;
- hyphlist [ h ] = p ;
- p = q ;
- t = hyphword [ h ] ;
- hyphword [ h ] = s ;
- s = t ;
- lab45: ;
- if ( h > 0 )
- decr ( h ) ;
- else h = 307 ;
- }
- hyphword [ h ] = s ;
- hyphlist [ h ] = p ;
- }
- if ( curcmd == 2 )
- return ;
- n = 0 ;
- p = 0 ;
- }
- break ;
- default :
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 536 ) ;
- }
- printesc ( 793 ) ;
- print ( 794 ) ;
- {
- helpptr = 2 ;
- helpline [ 1 ] = 795 ;
- helpline [ 0 ] = 796 ;
- }
- error () ;
- }
- break ;
- }
- }
- }
-
- #ifdef INITEX
- quarterword znewtrieop ( d , n , v )
- smallnumber d , n ;
- quarterword v ;
- {/* 10 */ register quarterword Result; r_newtrieop
- halfword h ;
- quarterword u ;
- h = abs ( toint ( n ) + 313 * toint ( d ) + 361 * toint ( v ) ) % 510 ;
- while ( true ) {
- u = trieophash [ h ] ;
- if ( u == 0 )
- {
- if ( trieopptr == 255 )
- {
- Result = 0 ;
- return(Result) ;
- }
- incr ( trieopptr ) ;
- hyfdistance [ trieopptr ] = d ;
- hyfnum [ trieopptr ] = n ;
- hyfnext [ trieopptr ] = v ;
- trieophash [ h ] = trieopptr ;
- Result = trieopptr ;
- return(Result) ;
- }
- if ( ( hyfdistance [ u ] == d ) && ( hyfnum [ u ] == n ) && ( hyfnext [ u
- ] == v ) )
- {
- Result = u ;
- return(Result) ;
- }
- if ( h > 0 )
- decr ( h ) ;
- else h = 510 ;
- }
- return(Result) ;
- }
- triepointer ztrienode ( p )
- triepointer p ;
- {/* 10 */ register triepointer Result; r_trienode
- triepointer h ;
- triepointer q ;
- h = abs ( toint ( triec [ p ] ) + 1009 * toint ( trieo [ p ] ) + 2718 *
- toint ( triel [ p ] ) + 3142 * toint ( trier [ p ] ) ) % triesize ;
- while ( true ) {
- q = triehash [ h ] ;
- if ( q == 0 )
- {
- triehash [ h ] = p ;
- Result = p ;
- return(Result) ;
- }
- if ( ( triec [ q ] == triec [ p ] ) && ( trieo [ q ] == trieo [ p ] ) && (
- triel [ q ] == triel [ p ] ) && ( trier [ q ] == trier [ p ] ) )
- {
- Result = q ;
- return(Result) ;
- }
- if ( h > 0 )
- decr ( h ) ;
- else h = triesize ;
- }
- return(Result) ;
- }
- triepointer zcompresstrie ( p )
- triepointer p ;
- {register triepointer Result; r_compresstrie
- if ( p == 0 )
- Result = 0 ;
- else {
- triel [ p ] = compresstrie ( triel [ p ] ) ;
- trier [ p ] = compresstrie ( trier [ p ] ) ;
- Result = trienode ( p ) ;
- }
- return(Result) ;
- }
- initpatternm () { r_initpatternm
- halfword h ;
- triepointer p ;
- for ( h = 0 ; h <= 510 ; h ++ )
- trieophash [ h ] = 0 ;
- trieopptr = 0 ;
- triel [ 0 ] = 0 ;
- triec [ 0 ] = 0 ;
- trieptr = 0 ;
- for ( p = 0 ; p <= triesize ; p ++ )
- triehash [ p ] = 0 ;
- }
- inittriememo () { r_inittriememo
- triepointer p ;
- for ( p = 0 ; p <= trieptr ; p ++ )
- triehash [ p ] = 0 ;
- triemax = 128 ;
- triemin = 128 ;
- trie [ 0 ] .v.RH = 1 ;
- trietaken [ 0 ] = false ;
- for ( p = 1 ; p <= 128 ; p ++ )
- {
- trie [ p ] .v.LH = p - 1 ;
- trie [ p ] .v.RH = p + 1 ;
- trietaken [ p ] = false ;
- }
- }
- zfirstfit ( p )
- triepointer p ;
- {/* 45 40 */ r_firstfit
- triepointer h ;
- triepointer z ;
- triepointer q ;
- ASCIIcode c ;
- c = triec [ p ] ;
- if ( c < triemin )
- triemin = c ;
- z = trie [ triemin - 1 ] .v.RH ;
- while ( true ) {
- if ( z < c )
- goto lab45 ;
- h = z - c ;
- if ( triemax < h + 128 )
- {
- if ( triesize <= h + 128 )
- overflow ( 801 , triesize ) ;
- do { incr ( triemax ) ;
- trietaken [ triemax ] = false ;
- trie [ triemax ] .v.RH = triemax + 1 ;
- trie [ triemax ] .v.LH = triemax - 1 ;
- } while ( ! ( triemax == h + 128 ) ) ;
- }
- if ( trietaken [ h ] )
- goto lab45 ;
- q = trier [ p ] ;
- while ( q > 0 ) {
- if ( trie [ h + triec [ q ] ] .v.RH == 0 )
- goto lab45 ;
- q = trier [ q ] ;
- }
- goto lab40 ;
- lab45: z = trie [ z ] .v.RH ;
- }
- lab40: trietaken [ h ] = true ;
- triehash [ p ] = h ;
- q = p ;
- do { z = h + triec [ q ] ;
- trie [ trie [ z ] .v.RH ] .v.LH = trie [ z ] .v.LH ;
- trie [ trie [ z ] .v.LH ] .v.RH = trie [ z ] .v.RH ;
- trie [ z ] .v.RH = 0 ;
- q = trier [ q ] ;
- } while ( ! ( q == 0 ) ) ;
- }
- ztriepack ( p )
- triepointer p ;
- {r_triepack
- triepointer q ;
- do { q = triel [ p ] ;
- if ( ( q > 0 ) && ( triehash [ q ] == 0 ) )
- {
- firstfit ( q ) ;
- triepack ( q ) ;
- }
- p = trier [ p ] ;
- } while ( ! ( p == 0 ) ) ;
- }
- ztriefix ( p )
- triepointer p ;
- {r_triefix
- triepointer q ;
- ASCIIcode c ;
- triepointer z ;
- z = triehash [ p ] ;
- while ( p != 0 ) {
- q = triel [ p ] ;
- c = triec [ p ] ;
- trie [ z + c ] .v.RH = triehash [ q ] ;
- trie [ z + c ] .b1 = c ;
- trie [ z + c ] .b0 = trieo [ p ] ;
- if ( q > 0 )
- triefix ( q ) ;
- p = trier [ p ] ;
- }
- }
- newpatterns () { /* 30 31 */ r_newpatterns
- smallnumber k, l ;
- boolean digitsensed ;
- quarterword v ;
- triepointer p, q ;
- boolean firstchild ;
- ASCIIcode c ;
- triepointer r, s ;
- twohalves h ;
- scanleftbrac () ;
- initpatternm () ;
- k = 0 ;
- hyf [ 0 ] = 0 ;
- digitsensed = false ;
- while ( true ) {
- getxtoken () ;
- switch ( curcmd )
- {case 11 :
- case 12 :
- if ( digitsensed || ( curchr < 48 ) || ( curchr > 57 ) )
- {
- if ( curchr == 46 )
- curchr = 128 ;
- else {
- curchr = eqtb [ 4755 + curchr ] .hh .v.RH ;
- if ( curchr == 0 )
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 805 ) ;
- }
- {
- helpptr = 1 ;
- helpline [ 0 ] = 804 ;
- }
- error () ;
- curchr = 128 ;
- }
- }
- if ( k < 63 )
- {
- incr ( k ) ;
- hc [ k ] = curchr - 1 ;
- hyf [ k ] = 0 ;
- digitsensed = false ;
- }
- }
- else {
- hyf [ k ] = curchr - 48 ;
- if ( k < 63 )
- digitsensed = true ;
- }
- break ;
- case 10 :
- case 2 :
- {
- if ( k > 0 )
- {
- if ( hc [ 1 ] == 127 )
- hyf [ 0 ] = 0 ;
- if ( hc [ k ] == 127 )
- hyf [ k ] = 0 ;
- l = k ;
- v = 0 ;
- while ( true ) {
- if ( hyf [ l ] != 0 )
- v = newtrieop ( k - l , hyf [ l ] , v ) ;
- if ( l > 0 )
- decr ( l ) ;
- else goto lab31 ;
- }
- lab31: ;
- q = 0 ;
- while ( l < k ) {
- incr ( l ) ;
- c = hc [ l ] ;
- p = triel [ q ] ;
- firstchild = true ;
- while ( ( p > 0 ) && ( c > triec [ p ] ) ) {
- q = p ;
- p = trier [ q ] ;
- firstchild = false ;
- }
- if ( ( p == 0 ) || ( c < triec [ p ] ) )
- {
- if ( trieptr == triesize )
- overflow ( 801 , triesize ) ;
- incr ( trieptr ) ;
- trier [ trieptr ] = p ;
- p = trieptr ;
- triel [ p ] = 0 ;
- if ( firstchild )
- triel [ q ] = p ;
- else trier [ q ] = p ;
- triec [ p ] = c ;
- trieo [ p ] = 0 ;
- }
- q = p ;
- }
- if ( trieo [ q ] != 0 )
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 806 ) ;
- }
- {
- helpptr = 1 ;
- helpline [ 0 ] = 804 ;
- }
- error () ;
- }
- trieo [ q ] = v ;
- }
- if ( curcmd == 2 )
- goto lab30 ;
- k = 0 ;
- hyf [ 0 ] = 0 ;
- digitsensed = false ;
- }
- break ;
- default :
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 802 ) ;
- }
- printesc ( 803 ) ;
- {
- helpptr = 1 ;
- helpline [ 0 ] = 804 ;
- }
- error () ;
- }
- break ;
- }
- }
- lab30: ;
- triel [ 0 ] = compresstrie ( triel [ 0 ] ) ;
- inittriememo () ;
- if ( triel [ 0 ] != 0 )
- {
- firstfit ( triel [ 0 ] ) ;
- triepack ( triel [ 0 ] ) ;
- }
- r = 0 ;
- while ( trietaken [ r ] ) incr ( r ) ;
- triehash [ 0 ] = r ;
- triefix ( triel [ 0 ] ) ;
- r = 0 ;
- h .v.RH = 0 ;
- h .b0 = 0 ;
- h .b1 = 0 ;
- do { s = trie [ r ] .v.RH ;
- trie [ r ] = h ;
- r = s ;
- } while ( ! ( r > triemax ) ) ;
- }
- #endif /* INITEX */
- halfword zprunepagetop ( p )
- halfword p ;
- {register halfword Result; r_prunepagetop
- halfword prevp ;
- halfword q ;
- prevp = memtop - 3 ;
- mem [(long) memtop - 3 ] .hh .v.RH = p ;
- while ( p != 0 ) switch ( mem [(long) p ] .hh.b0 )
- {case 0 :
- case 1 :
- case 2 :
- {
- q = newskipparam ( 10 ) ;
- mem [(long) prevp ] .hh .v.RH = q ;
- mem [(long) q ] .hh .v.RH = p ;
- if ( mem [(long) tempptr + 1 ] .cint > mem [(long) p + 3 ] .cint )
- mem [(long) tempptr + 1 ] .cint = mem [(long) tempptr + 1 ] .cint - mem [(long) p + 3 ]
- .cint ;
- else mem [(long) tempptr + 1 ] .cint = 0 ;
- p = 0 ;
- }
- break ;
- case 8 :
- case 4 :
- case 3 :
- {
- prevp = p ;
- p = mem [(long) prevp ] .hh .v.RH ;
- }
- break ;
- case 10 :
- case 11 :
- case 12 :
- {
- q = p ;
- p = mem [(long) q ] .hh .v.RH ;
- mem [(long) q ] .hh .v.RH = 0 ;
- mem [(long) prevp ] .hh .v.RH = p ;
- flushnodelis ( q ) ;
- }
- break ;
- default :
- confusion ( 807 ) ;
- break ;
- }
- Result = mem [(long) memtop - 3 ] .hh .v.RH ;
- return(Result) ;
- }
- halfword zvertbreak ( p , h , d )
- halfword p ;
- scaled h , d ;
- {/* 30 45 90 */ register halfword Result; r_vertbreak
- halfword prevp ;
- halfword q, r ;
- integer pi ;
- integer b ;
- integer leastcost ;
- halfword bestplace ;
- scaled prevdp ;
- smallnumber t ;
- prevp = p ;
- leastcost = 1073741823 ;
- activewidth [ 1 ] = 0 ;
- activewidth [ 2 ] = 0 ;
- activewidth [ 3 ] = 0 ;
- activewidth [ 4 ] = 0 ;
- activewidth [ 5 ] = 0 ;
- activewidth [ 6 ] = 0 ;
- prevdp = 0 ;
- while ( true ) {
- if ( p == 0 )
- pi = - 10000 ;
- else switch ( mem [(long) p ] .hh.b0 )
- {case 0 :
- case 1 :
- case 2 :
- {
- activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [(long) p + 3 ] .cint ;
- prevdp = mem [(long) p + 2 ] .cint ;
- goto lab45 ;
- }
- break ;
- case 8 :
- goto lab45 ;
- break ;
- case 10 :
- if ( ( mem [(long) prevp ] .hh.b0 < 9 ) )
- pi = 0 ;
- else goto lab90 ;
- break ;
- case 11 :
- {
- if ( mem [(long) p ] .hh .v.RH == 0 )
- t = 12 ;
- else t = mem [(long) mem [(long) p ] .hh .v.RH ] .hh.b0 ;
- if ( t == 10 )
- pi = 0 ;
- else goto lab90 ;
- }
- break ;
- case 12 :
- pi = mem [(long) p + 1 ] .cint ;
- break ;
- case 4 :
- case 3 :
- goto lab45 ;
- break ;
- default :
- confusion ( 808 ) ;
- break ;
- }
- if ( pi < 10000 )
- {
- if ( activewidth [ 1 ] < h )
- if ( ( activewidth [ 3 ] != 0 ) || ( activewidth [ 4 ] != 0 ) || (
- activewidth [ 5 ] != 0 ) )
- b = 0 ;
- else b = badness ( h - activewidth [ 1 ] , activewidth [ 2 ] ) ;
- else if ( activewidth [ 1 ] - h > activewidth [ 6 ] )
- b = 1073741823 ;
- else b = badness ( activewidth [ 1 ] - h , activewidth [ 6 ] ) ;
- if ( b < 1073741823 )
- if ( pi <= - 10000 )
- b = pi ;
- else if ( b < 10000 )
- b = b + pi ;
- else b = 100000 ;
- if ( b <= leastcost )
- {
- bestplace = p ;
- leastcost = b ;
- bestheightpl = activewidth [ 1 ] + prevdp ;
- }
- if ( ( b == 1073741823 ) || ( pi <= - 10000 ) )
- goto lab30 ;
- }
- if ( ( mem [(long) p ] .hh.b0 < 10 ) || ( mem [(long) p ] .hh.b0 > 11 ) )
- goto lab45 ;
- lab90: if ( mem [(long) p ] .hh.b0 == 11 )
- q = p ;
- else {
- q = mem [(long) p + 1 ] .hh .v.LH ;
- activewidth [ 2 + mem [(long) q ] .hh.b0 ] = activewidth [ 2 + mem [(long) q ]
- .hh.b0 ] + mem [(long) q + 2 ] .cint ;
- activewidth [ 6 ] = activewidth [ 6 ] + mem [(long) q + 3 ] .cint ;
- if ( ( mem [(long) q ] .hh.b1 != 0 ) && ( mem [(long) q + 3 ] .cint != 0 ) )
- {
- {
- if ( interaction == 3 )
- wakeuptermin () ;
- printnl ( 133 ) ;
- print ( 809 ) ;
- }
- {
- helpptr = 4 ;
- helpline [ 3 ] = 810 ;
- helpline [ 2 ] = 811 ;
- helpline [ 1 ] = 812 ;
- helpline [ 0 ] = 776 ;
- }
- error () ;
- r = newspec ( q ) ;
- mem [(long) r ] .hh.b1 = 0 ;
- deletegluere ( q ) ;
- mem [(long) p + 1 ] .hh .v.LH = r ;
- }
- }
- activewidth [ 1 ] = activewidth [ 1 ] + prevdp + mem [(long) q + 1 ] .cint ;
- prevdp = 0 ;
- lab45: if ( prevdp > d )
- {
- activewidth [ 1 ] = activewidth [ 1 ] + prevdp - d ;
- prevdp = d ;
- }
- prevp = p ;
- p = mem [(long) prevp ] .hh .v.RH ;
- }
- lab30: Result = bestplace ;
- return(Result) ;
- }
-